/**
 * @Description: 系统配置，用户打包，css ，js 加载 代理等
 */
const path = require('path')

// 是否为生产环境
const isProduction = process.env.NODE_ENV !== 'development';


// 代码压缩
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
  devServer: {
    open: true,
    https: false,
    hotOnly: false,
    // http://www.corho.com:8080/ 注意: 这个备案域名指定的回调地址端口是8080!!!
    port: 8080
  },
  productionSourceMap: false,
  publicPath: isProduction ? './' : '/',
  pluginOptions: {
    'style-resources-loader': {
      preProcessor: 'less',
      // 那些文件自动引入, 使用绝对路径
      // 需要使用path.join()来拼接完整路径
      patterns: [
        path.join(__dirname, './src/assets/styles/mixins.less'),
        path.join(__dirname, './src/assets/styles/variable.less'),
      ]
    }
  },
  chainWebpack: config => {
    // 图片加载,
    config.module
      .rule('images')
      .use('url-loader')
      .loader('url-loader')
      .tap(options => Object.assign(options, { limit: 10000 }))
    // 开启IP域名访问
    config.devServer.disableHostCheck(true)
  },
  // 这个是设置外部扩展(忽略打包, 因为这个包已经在public/index.html中引入了cdn资源), 模块为qc变量名为QC, 导入qc将不做打包
  configureWebpack: config => {
    config.externals = {
      // import VueRouter from 'vue-router'
      // key: npm包名    value:  引入`npm包名`时提供的变量(对象)
      qc: 'QC',
      vue: 'Vue',
      vuex: 'Vuex',
      'vue-router': 'VueRouter',
      axios: 'axios',
      nprogress: 'NProgress',
      dayjs: 'dayjs',
      'vuex-persistedstate': 'createPersistedState',
      mockjs: 'mockjs'
    }

    // 代码压缩
    config.plugins.push(
      new UglifyJsPlugin({
        uglifyOptions: {
          // 生产环境自动删除console / debugger
          compress: {
            drop_debugger: true,
            drop_console: true,
            pure_funcs: ['console.log']
          }
        },
        sourceMap: false,
        parallel: true
      })
    )
  },
}
